package com.yc.thread;

public class Demo3 {
    int count=0;


//synchronized 同步锁 将方法变成 同步方法  =》 原子操作
//实例synchronized 方法，锁定的是当前对象=》 this
    synchronized void add1(){
        //synchronized 同步锁 将方法变成 同步方法  =》 原子操作
        count++;// 非原子操作
    }

    void add2(){

        synchronized (this){
            count++;
        }

    }


    public static void main(String[] args) throws InterruptedException {
        Demo3 demo3=new Demo3();

        for (int i = 0; i < 5; i++) {

            Thread t1=new Thread(()->{
                for (int j = 0; j < 10000; j++) {
                    demo3.add1();
                    System.out.println(j);
                }
            });
            t1.start();
        }
    /*    在这段代码中，循环创建了5个线程，并且每个线程都使用了同一个变量名t1。虽然每次循环都会重新创建一个线程对象，
    但是由于变量名t1是在循环内部定义的，所以每次循环结束后，变量t1会被销毁。因此，下一次循环开始时，又会重新创建一个新的变量t1。

        所以，虽然变量名相同，但是每次循环创建的线程对象是不同的，因此不会出现线程重命名的问题。*/

        for (int i = 0; i < 5; i++) {
            Thread t1=new Thread(()->{
                for (int j = 0; j < 10000; j++) {
                    demo3.add2();
                }
            });
            t1.start();
        }

        Thread.sleep(2000);

        System.out.println("demo3.count="+demo3.count);
    }
}
